#include	<stdio.h>
/*宏定义了的rows，不能作为其它函数的变量，只能是常量使用，且不可修改*/
#define rows 3
#define cols 4

void sum_rows(int ar[][cols], int row);
void sum_cols(int [][cols], int);
int sum2d(int(*ar)[cols], int row);//此种指针的表示方式其实说明了数组和指针的关系，可以理解为什么scanf的使用时，数组不用取地址。

int main(int argc, char const *argv[])
{
	/*初始化时不要忘记各花括号之间的逗号','，最好写成以下形式，便于知道*/
	int junk[rows][cols] = {
		{2,4,6,8},
		{3,5,7,9},
		{12,10,8,6}
	};

	sum_rows(junk,rows);
	sum_cols(junk,rows);
	printf("所有元素之和：%d\n",sum2d(junk,rows));
	return 0;
}
/*在声明时，每条声明都需要分号，但在写的时候不要加*/
void sum_rows(int ar[][cols], int row)
{
	
	
	int tot;

	for (int i = 0; i < row; i++)
	{
		tot = 0;
		for (int c = 0; c < cols; c++)
		{
			tot += ar[i][c];
			
		}
		printf("第%d行的和：\t%d\n", i,tot);
	}
}
/*在声明中参数名可以忽略，但是在写函数是不可以忽略，总结：以后都不要省略。*/
void sum_cols(int ar[][cols], int row)
{
	int tot;

	for (int i = 0; i < cols; i++)
	{
		tot = 0;
		for (int c = 0; c < row; c++)
		{
			tot += ar[c][i];
			
		}
		printf("第%d列的和：\t%d\n", i,tot);
	}
}
int sum2d(int(*ar)[cols], int row)
{
	int tot;

	for (int i = 0; i < row; i++)
	{
		tot = 0;
		for (int c = 0; c < cols; c++)
		{
			tot += ar[i][c];
		}
	}
	return tot;
}